// exam1201中介绍了创建最简单的界面和使用回调函数退出的案例
// 我们也可以自行编写一个函数，用于处理窗体的退出，其好处是可以在退出的时候进行更多的操作
// 例如，提示即将退出等。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <gtk/gtk.h>

// gint为GTK中的int，gpointer为GTK中的指针*
// 代码中涉及的g_print函数通常用于调试，可以在Shell中输出一个字符串，以观察当前的程序执行状态，类似与printf函数
// 参数format为带输出的字符串，函数没有返回值
gint closewindow(GtkWidget *widget, gpointer gdata){
	g_print("close the window.\n");	// 输出提示
	gtk_main_quit();		// 调用gtk_main_quit来退出主循环，实现关闭窗体
	return FALSE;			// 退出
}

int main(int argc, char *argv[]){
	
	// 1、创建一个GtkWidget类型的结构体指针
	GtkWidget *window;

	char title[] = "自定义退出回调函数";
	// 初始化窗体函数
	gtk_init(&argc, &argv);

	// 2、创建一个窗体
	window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

	gtk_window_set_title(GTK_WINDOW(window),title);
	// 3、定义窗体大小
	gtk_widget_set_usize(GTK_WINDOW(window),500,500);
	gtk_widget_set_uposition(GTK_WINDOW(window),500,500);

	// 4、调用自行编写的回调函数
	//g_signal_connect(GTK_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit),NULL);
	g_signal_connect(GTK_OBJECT(window),"destroy",G_CALLBACK(closewindow),NULL);
	
	// 5、显示窗体
	gtk_widget_show(window);
	
	// 6、进入循环
	gtk_main();

	return 0;
}

